<?php
/*
Author: Nicolas Zdanovicz
Date 20140325
User Data Access Class
*/
class DAOHistoricoCarga{



    public static function getAll(){
         
         $db = getPDO();
         $sql = "select id, id_usuario as usuario,antiguos, creditos, precio, fecha_carga as fechaCarga, libre, vencimiento_creditos from historico_carga";
         $stmt = $db->prepare($sql);
         $ok = $stmt->execute();
         $result = $stmt->fetchAll(\PDO::FETCH_OBJ);
         $arrResult = array();    
        
         foreach($result as $row){             
             array_push($arrResult,DAOHistoricoCarga::mapValues($row));
         }
         
        return $arrResult;
    }
    
    public static function getAllByUsuario($usrId){
    	 
    	$db = getPDO();
    	$sql = "select id, id_usuario as usuario,antiguos, creditos, precio, fecha_carga as fechaCarga,libre, vencimiento_creditos from historico_carga where id_usuario = ? order by fecha_carga desc";
    	$stmt = $db->prepare($sql);
    	$ok = $stmt->execute(array($usrId));
    	$result = $stmt->fetchAll(\PDO::FETCH_OBJ);
    	$arrResult = array();
    
    	foreach($result as $row){
    		array_push($arrResult,DAOHistoricoCarga::mapValues($row));
    	}
    	 
    	return $arrResult;
    }
    
    public static function getAllByRangeDate($from, $to){
    
    	$db = getPDO();
    	$sql = "select hc.id, concat(uw.nombre , ' ', uw.apellido) as usuario, 
       (CASE hc.libre WHEN 'S' THEN 'Libre' ELSE hc.creditos END) as creditos,
        hc.fecha_carga as fechaCarga, hc.precio 
	    from
        historico_carga hc join usuario_web uw on hc.id_usuario = uw.id 
        where
        hc.fecha_carga between ? and ? order by fecha_carga asc";
    	$stmt = $db->prepare($sql);
    	$ok = $stmt->execute(array($from,$to));
    	$result = $stmt->fetchAll(\PDO::FETCH_OBJ);
    	$arrResult = array();
    
    	foreach($result as $row){
    		array_push($arrResult,DAOHistoricoCarga::mapValuesReport($row));
    	}
    
    	return $arrResult;
    }
    
        public static function checkExistente($usrId){
    	 
    	$db = getPDO();
    	$sql = "select * from historico_carga where DATE_FORMAT(fecha_carga, '%Y%m%d%H%i') = DATE_FORMAT(NOW(), '%Y%m%d%H%i')  and id_usuario = ? ";
    	$stmt = $db->prepare($sql);
    	$ok = $stmt->execute(array($usrId));
    	
    	$obj = $stmt->fetchObject();
    	 
    	$existe = null;
    	if($obj!=null){
    		$existe= 'S';
    	}else{
    		$existe= 'N';
    	}
    	return $existe;
    }
    
    
    
    
    
    public static function add($historicoCarga){
        
         if(DaoHistoricoCarga::checkExistente($historicoCarga->getUsuario()) == 'N'){
         
         $db = getPDO();
          $sql = "insert into historico_carga (id_usuario, antiguos, creditos, precio, fecha_carga,libre,vencimiento_creditos) values ";
          $sql.= "(:usuario, :antiguos, :creditos, :precio, :fecha, :libre, :vencimientoCreditos)";
          $stmt = $db->prepare($sql);

          $ok = $stmt->execute(array(
          							 ":usuario" =>$historicoCarga->getUsuario(),
									 ":antiguos" =>$historicoCarga->getAntiguos(),
									 ":creditos" =>$historicoCarga->getCreditos(),
          							 ":precio" =>$historicoCarga->getPrecio(),
          							 ":fecha" =>$historicoCarga->getFechaCarga(),
          							 ":libre" =>$historicoCarga->getLibre(),
          							 ":vencimientoCreditos" =>$historicoCarga->getVencimientoCreditos()
          ));
       	 $historicoCarga->setId($db->lastInsertId());
        
        }
        return $historicoCarga;        
         
    }
     
    private static function mapValues($obj){
        $hca = new HistoricoCarga();
		
		$hca->setId($obj->id);
		$hca->setUsuario($obj->usuario);
		$hca->setAntiguos($obj->antiguos);
		$hca->setCreditos($obj->creditos);
		$hca->setFechaCarga(date("d/m/Y H:i",strtotime($obj->fechaCarga)));
		$hca->setPrecio($obj->precio);
		$hca->setLibre($obj->libre);
		$hca->setVencimientoCreditos(date("d/m/Y H:i",strtotime($obj->vencimiento_creditos)));
        return $hca;
        
    }
    
    private static function mapValuesReport($obj){
    	$hca = new HistoricoCarga();
    
    	$hca->setId($obj->id);
    	$hca->setUsuario($obj->usuario);
    	$hca->setCreditos($obj->creditos);
    	$hca->setFechaCarga(date("d/m/Y H:i",strtotime($obj->fechaCarga)));
    	$hca->setPrecio($obj->precio);
    	return $hca;
    
    }
    
}
?>